3.2 Bucles
Un bucle es una estructura de control que permite repetir un bloque de código mientras se cumpla una condición o mientras se recorren los elementos de una secuencia.
Sin bucles, si quisiéramos imprimir los números del 1 al 10, tendríamos que escribir 10 veces la misma instrucción print(). Gracias a los bucles, podemos reducir todo eso a unas pocas líneas y hacer que el programa sea mucho más flexible y reutilizable.
En Python existen principalmente dos tipos de bucles:
while→ se utiliza para repetir un bloque mientras se cumpla una condición lógica.for→ se utiliza para recorrer secuencias (listas, tuplas, cadenas, rangos, etc.).
Además, Python ofrece sentencias especiales que modifican el comportamiento de los bucles:
break→ interrumpe el bucle.continue→ salta a la siguiente iteración.pass→ no hace nada, sirve como marcador de posición.else→ ejecuta un bloque si el bucle termina normalmente (sinbreak).
1️⃣ El bucle while
En muchas situaciones, no sabemos de antemano cuántas veces queremos repetir una acción. Por ejemplo: pedir una contraseña hasta que sea correcta, esperar a que el usuario escriba “salir” o simular que un contador se va decrementando hasta llegar a cero.
En estos casos, Python nos ofrece el bucle while, que repite un bloque de código mientras se cumpla una condición lógica.
La palabra inglesa while significa “mientras”, lo cual refleja su funcionamiento: el bloque de instrucciones se ejecuta mientras la condición sea verdadera. En cuanto la condición se vuelve falsa, el bucle termina y el programa continúa por la siguiente instrucción.

while condicion:
# bloque de codigo que se ejecuta si la condicion es True
- La condición es una expresión que devuelve
TrueoFalse. - Mientras la condición sea
True, el bloque indentado se ejecuta una y otra vez. - Si la condición es
Falsedesde el principio, el bloque no se ejecutará ni una sola vez.
contador = 1
while contador <= 5:
print("Valor:", contador)
contador += 1 # importante actualizar la variable
2️⃣ El bucle for
En muchos lenguajes de programación, el bucle for se usa para ejecutar un bloque de código un número determinado de veces, controlado por un contador. En Python, sin embargo, el bucle for tiene un enfoque más simple y poderoso: sirve para recorrer elementos de una secuencia (listas, cadenas, tuplas, diccionarios…) o cualquier objeto que sea iterable.
La palabra inglesa for significa “para cada”. Por tanto, un for en Python se entiende como:
👉 “Para cada elemento de esta secuencia, haz algo con él”.

for variable in secuencia:
# bloque de código que se repite
variablees un nombre que irá tomando cada uno de los valores de la secuencia, uno por uno.secuenciapuede ser una lista, una cadena, un rango de números, etc. La secuencia debe ser siempre un elemento iterable- El bloque indentado se ejecutará tantas veces como elementos tenga la secuencia.
En Python, un iterable es cualquier objeto capaz de devolver sus elementos uno por uno, de forma que se pueda recorrer en un bucle for o convertir en un objeto iterador mediante la función iter().
En otras palabras, un iterable es todo aquello que se puede recorrer secuencialmente. Los principales iterables en python son:
- Cadenas de texto (
str) - Listas (
list) - Tuplas (
tuple) - Diccionarios (
dict) - Conjuntos (
set) - Objetos
range()
OJO 🔎 -> Aunque suelen confundirse, no es lo mismo un objeto iterable que un iterador:
- Iterable → objeto que puede producir un iterador (listas, cadenas, tuplas, etc.).
- Iterador → objeto que recuerda su posición y devuelve el siguiente elemento cuando se llama a
next(). Lo veremos en unidades posteriores
paises = ["Italia", "Francia", "Alemania"]
for pais in paises:
print("Me gustaría visitar", pais)
# Me gustaría visitar Italia
# Me gustaría visitar Francia
# Me gustaría visitar Alemania
🟩 La función range()
En muchos casos queremos repetir un bucle un número específico de veces, como un contador. Para eso, Python ofrece la función range(), que genera una secuencia de números.
range(inicio, fin, paso)
inicio→ valor inicial (incluido). Por defecto es0.fin→ valor final (excluido). Es obligatorio.paso→ incremento (positivo o negativo). Por defecto es1.
for i in range(4):
print(i)
# 0
# 1
# 2
# 3
for i in range(1, 4):
print(i)
# 1
# 2
# 3
for i in range(1, 20, 5):
print(i)
# 1
# 6
# 11
# 16
for i in range(8, 0, -2):
print(i)
# 8
# 6
# 4
# 2
3️⃣ Control avanzado de bucles
Los bucles for y while nos permiten repetir acciones en Python, pero no siempre necesitamos que se ejecuten de forma lineal de principio a fin. Muchas veces queremos interrumpir, saltar partes del código, ejecutar acciones al finalizar o simplemente dejar huecos de código pendientes de implementar.
Para esas situaciones, Python nos ofrece cuatro herramientas muy útiles:
break→ salir inmediatamente del bucle.continue→ saltar a la siguiente iteración.else→ ejecutar un bloque al terminar un bucle de forma “natural”.pass→ no hacer nada (instrucción nula).
Estas instrucciones funcionan tanto en bucles while como en for, aunque su utilidad puede variar según el caso.
🟩 break: salir de un bucle antes de tiempo
La instrucción break detiene el bucle en cualquier momento, sin esperar a que la condición sea falsa (while) o a que se terminen los elementos (for).
while True:
texto = input("Escribe 'salir' para terminar: ")
if texto == "salir":
print("Programa finalizado")
break
print("Escribiste:", texto)
numeros = [2, 4, 6, 8, 10]
for n in numeros:
if n == 6:
print("Encontrado el número 6")
break
🟦 continue: saltar a la siguiente iteración
La instrucción continue omite el resto del bloque en la iteración actual y vuelve a comprobar la condición del bucle (while) o a pasar al siguiente elemento (for).
while True:
numero = input("Introduce un número positivo (o 'salir' para terminar): ")
if numero == "salir":
print("Fin del programa.")
break
if not numero.isdigit():
print("❌ Entrada no válida. Debes escribir un número.")
continue # vuelve al inicio del bucle sin ejecutar lo de abajo
numero = int(numero)
print("✅ Has introducido:", numero)
Con el uso de continue evitamos que el programa muestre un error al convertir a int uns posible cadena de texto.
datos = [10, 0, 25, -5, 15]
for valor in datos:
if valor <= 0:
print(f"Saltando valor no válido: {valor}")
continue # no se puede dividir entre 0 o negativos
resultado = 100 / valor
print(f"Procesado {valor} → resultado: {resultado}")
En este caso evitamos la división por 0 o números negativos.
🟨 else en bucles
Python permite añadir un bloque else a los bucles while y for.
Este else se ejecuta solo si el bucle finaliza normalmente, es decir:
- cuando la condición del
whilese vuelve falsa, o - cuando el
fortermina de recorrer todos los elementos.
Si el bucle se interrumpe con break, el else no se ejecuta.
intentos = 1
while intentos <= 3:
clave = input("Introduce la clave: ")
if clave == "python":
print("Acceso concedido")
break
intentos += 1
else:
print("Acceso denegado: demasiados intentos")
numeros = [1, 3, 5, 7]
for n in numeros:
if n == 4:
print("Número encontrado")
break
else:
print("Número no está en la lista")
🟧 pass: no hacer nada
La instrucción pass sirve como relleno: ocupa el lugar de un bloque que aún no queremos implementar, pero mantiene la sintaxis correcta.
while True:
opcion = input("Opción: ")
if opcion == "1":
print("Funcionalidad lista")
elif opcion == "2":
pass # pendiente de implementar
elif opcion == "salir":
break
for i in range(5):
if i == 2:
pass # todavía no hago nada con el 2
else:
print("Valor:", i)
✅ Buenas prácticas
- Evitar bucles infinitos accidentales: siempre hay que asegurarse de que la condición pueda volverse falsa en algún momento, o incluir un
breakque garantice la salida. - Actualizar las variables: si la condición depende de una variable (como un contador), es fundamental modificar su valor dentro del bucle, de lo contrario nunca terminará.
- Usar
whilecuando no conocemos cuántas iteraciones habrá: si el número de repeticiones es fijo o corresponde al recorrido de una secuencia, suele ser mejor un buclefor. - Controlar la entrada del usuario: cuando el bucle depende de lo que escriba el usuario, es recomendable validar los datos para evitar errores.
- Usa
forsiempre que quieras recorrer los elementos de una colección o repetir un número determinado de veces. - Aprovecha
range()para generar secuencias numéricas de manera clara. - Recuerda que el valor final en
range()no se incluye:range(1, 5)llega hasta4. - Prefiere el bucle
forsobrewhilecuando el número de iteraciones es conocido o está bien definido.
- Usa
breakpara detener la ejecución cuando ya encontraste lo que buscabas o alcanzaste una condición de salida. - Usa
continuepara saltar casos no deseados y mantener el código más limpio. - Aprovecha
elseen bucles de búsqueda: evita tener que usar “banderas” adicionales. - Utiliza
passsolo como marcador temporal; no lo dejes en versiones finales del código salvo casos muy justificados.